<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Guestbook block module.
 *
 * @package    block_moodlebook
 * @copyright  Konovalov Nikolay <konovalov.nk@gmail.com>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

defined('MOODLE_INTERNAL') || die();

global $CFG;
require_once($CFG->dirroot . '/blocks/moodlebook/lib/moodlebook_forms.php');
require_once($CFG->dirroot . '/blocks/moodlebook/lib/generate_html.php');
require_once($CFG->dirroot . '/blocks/moodlebook/lib/moodle_db.php');

/*
 * Основной класс гостевой книги для отображения в виде блока
 */
class block_moodlebook extends block_base {

    function init() {
        $this->title = get_string('moodlebook', 'block_moodlebook');
    }
    
    /*
     * Возвращает отображаемую информацию в блоке
     */
    function get_content() {
        if ($this->content !== null) {
            return $this->content;
        }

        if (empty($this->instance)) {
            $this->content = '';
            return $this->content;
        }
        $this->content = new stdClass();

        if (! empty($this->config->title)) {
            $this->title = $this->config->title;
        }

        if (! empty($this->config->text)) {
            $this->content->text .= $this->config->text;
        }

        /*
         * Проверяем, если данные были посланы с формы (кнопки comment/edit/delete/save changes/...)
         */

        $action = optional_param('action', '', PARAM_TEXT);
        $hidden = array('submitbutton', 'commentmsg',
                        'editmsg', 'deletemsg',
                        'editcmt', 'deletecmt');
        foreach ($hidden as $value) { // find which action was done
            if ($hiddenaction = optional_param($value, '', PARAM_TEXT)) {
                $hiddenaction = $value;
                break;
            }
        }
        $msgid = optional_param('msgid', '', PARAM_INT);
        $cmtid = optional_param('cmtid', '', PARAM_INT);
        
/*
 * Если кнопки были нажаты, то совершаем требуемое действие, иначе просто выводим
 * гостевую книгу. При этом для каждого действия генерируется своя страница: для комментирования --
 * оригинальное сообщение и комментарии к нему, для редактирования -- оригинальный сообщение/комментарий, и т.д.
 * Если была нажата кнопка submit с формы отправки (изменений/комментирования), то выполняются действия в бд, а затем
 * сразу отрисовывается гостевая книга.
 */
        $htmlout = new generate_html();
        $mdb = new moodle_db();
        if ($action) { // выполнено действие, обращаемся к бд, а затем отрисовываем гостевую книгу
            $text = required_param('messagearea', PARAM_NOTAGS);
            $author = required_param('author', PARAM_NOTAGS);
            switch ($action) {
                case 'comment':
                    $mdb->add_commentary($msgid, $text, $author);
                    break;
                
                case 'editmsg':
                    $mdb->update_message($msgid, $text, $author);
                    break;
                
                case 'editcmt':
                    $mdb->update_commentary($msgid, $cmtid, $text, $author);
                    break;
                
                case 'submitbutton':
                    $mdb->add_message($text, $author);
                    break;

                default:
                    break;
            }
            $this->content->text = $htmlout->show_guestbook_messages();
        } else { // действий нет, нажаты только кнопки в первый раз или ничего не было нажато совсем
            switch ($hiddenaction) {
                case 'commentmsg':
                    $this->content->text =  $htmlout->show_source_message_with_comments($msgid);
                    $this->content->text .= $htmlout->show_submit_form($msgid, 0, 'comment');
                    break;

                case 'editmsg':
                    $this->content->text =  $htmlout->show_message_by_id($msgid, false);
                    $this->content->text .= $htmlout->show_submit_form($msgid, 0, 'editmsg');
                    break;
                
                case 'deletemsg':
                    $mdb->delete_message($msgid);
                    unset($_POST['msgid']);
                    $this->content->text = $htmlout->show_guestbook_messages();
                    break;
                
                case 'editcmt':
                    $this->content->text =  $htmlout->show_commentary_by_id($msgid, $cmtid, false);
                    $this->content->text .= $htmlout->show_submit_form($msgid, $cmtid, 'editcmt');
                    break;
                
                case 'deletecmt':
                    $mdb->delete_commentary($msgid, $cmtid);
                    unset($_POST['msgid']);
                    unset($_POST['cmtid']);
                    $this->content->text = $htmlout->show_guestbook_messages();
                    break;

                default:
                    $this->content->text = $htmlout->show_guestbook_messages();
                    break;
            }
        }
        return $this->content;
    }

    public function applicable_formats() {
        return array('all' => true);
    }

    public function instance_allow_multiple() {
          return false;
    }

    function has_config() {return true;}

    public function cron() {
            mtrace( "Hey, my cron script is running" );
                      return true;
    }
}
